/*
@title: Maze_Runner3
@description: Maze_Runner3 is a puzzle game where players navigate through mazes to reach a designated goal, represented by a coin. As players progress through levels, they encounter invisible obstacles, requiring them to strategize and find alternate routes.
@author: Charlie
@tags: ['puzzle']
@addedOn: 2023-03-19

First time? Check out the tutorial game:
https://sprig.hackclub.com/gallery/getting_started

*/

const player = "p"
const box = "b"
const goal = "g"
const boxWhite = "w"
const red = "r"

setLegend(
  [ player, bitmap`
................
................
................
................
................
................
................
.....00000......
..0.00...00.0...
..000.0.0.000...
...000...000....
.....00000......
.....0...0......
.....0...0......
................
................` ],
  [ box, bitmap`
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000` ],
  [ goal, bitmap`
................
................
.....66666......
....6.....6.....
...6...6...6....
...6...6...6....
...6...6...6....
...6...6...6....
....6.....6.....
.....66666......
................
................
................
................
................
................` ],
  [ boxWhite, bitmap `
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................
................`], 
  [ red, bitmap `
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333
3333333333333333` ]
)

setSolids([ box, boxWhite, player ])

let level = 0
const levels = [
  map`
g...
bbb.
....
pbbb`,
  map `
g.....b
bbbbb..
b...b..
..b...b
bbbb.bb
...b...
pb...b.`, 
  map `
wwwwwwww.
gwwwwwwwp
.bbbbbbb.
..b......
..wwbbbb.
.bbb...b.
.b.bbbbb.
.b...b...
.......b.`, 
  map `
..........
p..b......
.b..bb....
.b........
.b.bbbb...
.bwb..bbb.
w.....b...
bg.bb...bb`,
  map `
pw....
.w..w.
.w..w.
.w..w.
.ww.w.
....wg`, 
  map `
.b...b...b...b...b...b...
pb.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
.b.b.b.b.b.b.b.b.b.b.b.b.
...b...b...b...b...b...bg`, 
  map `
p...........................................................
.w................................w.w.www...................
................ww.w.w..ww....w........ww...................
.....w.........ww.......w...w............ww.................
.....w.....rr.ww.........ww............w....................
..........r..ww...........ww................................
..........rwww.............ww...............................
...w.......r...rr..r...r....w.........w.....................
............r.r..r.rrr.rrr.r...r......w.....................
............r.r..r.r...r....r.r.......w.....................
..........rr.w.rr..r...r.....r..............................
ww...........w....wwwwwww.w..r.....w.w......................
.............w....ww..wwwwwwwr..w..www......................
............ww..wwwww.wwwwwwww..............................
...ww..w.w..w..ww.wwwwww...wwww....w........................
.............wwwwwww...ww..wwwww...w........................
.............www.wwww...w.www.www.....w.....................
......ww.w...www..ww.wwwwwwww..ww.w...w.....................
......w.ww..www...ww.w.ww...ww.www..........................
....ww..ww.www...w.w....w..w..ww.w..w.w.www.................
.www...ww.www.....ww..w.w......www.w........................
......www..wwww.wwww..w.ww............w.....................
.....www.w.ww......w..w.w......ww...........................
...www...wwww.....ww..w.w.......w...........................
ww.w...............w.wwwww.w..wwwww..wwww...................
ww...........w....ww..w..w..........w.......................
w.....ww........ww.ww.w..w..w.....w.........................
......w.w..........w..w..w.......................ww.........
..........w..ww....w..ww.w.....w............................
.......w.w.wwww...ww..w..w............w......w..............
..w.w.............ww..w.ww....w.............................
.........w....ww..ww..w..wwww.........w..w..................
w..w.......ww...w..w..w..ww..............w..................
............www...ww.....w...w..............w...............
w.............wwwwww.....w..w........w......................
.....w..w........www.....w...w......w.......................
..w.w....w......wwwwwwww.w.w.....ww.......w.................
........w......ww.w....wwwwww.............w.................
...ww.........ww......w.w.w.ww..............................
.............w.........ww...www......w......................
.....ww......w........www.ww..w........w........w...........
......ww.w..ww.w..www.w...www.ww................w...........
.......ww..www...wwww.w...www..w.....w...w......w...........
.....www.....ww..www..w..w....ww..........w.....w...........
.....w........w.ww....ww.....ww...........w.................
....w........ww.......wwwwwwwww.................w...........
...............w....wwwww.www..........w..w......w..........
..ww..........w.ww.www..www..w...w...w....w......w..........
w..............wwww.....w..............w....................
............................................w...............
...............ww.w.........................................
.....w......................................................
..........wwwww........................w............wwwww...
..............w...w.................................w...w...
..............w........................w............w...w...
.w.....................................w............w.......
..w.........w........w..............................w.wwwwww
..wwwwww.w.w..............w.........................w.w.....
.........ww.............................w...........w.w.w.gg
...............................w...w..w.............w...w.gg`
]

setMap(levels[level])

setPushables({
  [ player ]: []
})

onInput("s", () => {
  getFirst(player).y += 1
})

onInput("w", () => {
  getFirst(player).y -= 1
})

onInput("d", () => {
  getFirst(player).x += 1
})

onInput("a", () => {
  getFirst(player).x -= 1
})
/*
afterInput(() => {
  const checkIfWon = tilesWith(goal, player).length;
  if(checkIfWon === 0) {
    addText("you win!");
});
*/
afterInput(() => {
  // count the number of tiles with goals and boxes
  const goalNum = tilesWith(goal, player).length;
  
  if (goalNum === 1) {
    // increase the current level number
    level = level + 1;

    const currentLevel = levels[level];

    // make sure the level exists and if so set the map
    if (currentLevel !== undefined) {
      setMap(currentLevel);
    } else {
      addText("you win!", { y: 4, color: color`3` });
    }
  }
  }
);
